package cn.lsj.gateway;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class GatewayApplication {

    public static void main(String[] args) {
        SpringApplication.run(GatewayApplication.class, args);
    }

//    @Bean
//    public RouteLocator someRouteLocator(RouteLocatorBuilder builder) {
//        return builder.routes()
//                .route("circuitBreaker_filter", ps -> ps.path("/order/**")
//                        .filters(fs -> fs.circuitBreaker(config -> {
//                            config.setName("myCircuitBreaker");
//                            config.setFallbackUri("forward:/fallback");
//                        }))
//                        .uri("lb://order"))
//                .build();
//    }


//    @Bean
//    public URLValidateFilter tokenFilter() {
//        return new URLValidateFilter();
//    }


//    @Bean
//    public RouteLocator someRouteLocator(RouteLocatorBuilder builder) {
//        //路由构建器对象，构建一个路由规则
//        return builder.routes()
//                .route("custom_global_filter_route",ps -> ps.path("/**")
//                        .uri("http://localhost:8888"))
//                .build();
//    }


    //addResponseHeader过滤工厂
//    @Bean
//    public RouteLocator someRouteLocator(RouteLocatorBuilder builder) {
//        return builder.routes()
//                .route("addResponseHeader_filter",ps -> ps.path("/order/**")
//                        .filters(fs -> fs.addResponseHeader("X-Response-Red", "blue"))
//                        .uri("lb://order"))
//                .build();
//    }

// 动态路由和负载均衡
//    @Bean
//    public RouteLocator someRouteLocator(RouteLocatorBuilder builder) {
////路由构建器对象，构建一个路由规则
//        return builder.routes().
//                route("loadbalancer_route", predicateSpec ->
//                        predicateSpec
//                                .path("/payment/**")//Path路径匹配不是Spring的实现，也不是Java
//                                .uri("lb://payment"))
//                .route(predicateSpec ->
//                        predicateSpec.path("/order/**")
//                                .uri("lb://order")
//                )
//                .build();
//    }


//    //配置路由规则
//    @Bean
//    public RouteLocator someRouteLocator(RouteLocatorBuilder builder){
//        return builder.routes().route("baidu_route",predicateSpec ->
//                predicateSpec
//                        .path("/**")
//                        .uri("https://www.baidu.com")).build();
//    }

}
